package com.neusoft.mapper;

import com.neusoft.entity.Register;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author akemihomurasama
 */
@Mapper
public interface RegisterMapper {
    /**
     * 查询所有患者信息
     *
     * @return 患者信息列表
     */
    List<Register> queryAllRegister();

    /**
     * 添加患者信息
     *
     * @param register 患者信息
     */
    void addPatient(Register register);

    /**
     * 根据医生查询患者
     *
     * @param employeeId 医生id
     * @return 患者列表
     */
    List<Register> queryPatientByDoc(String employeeId);

    /**
     * 根据医生id分页查询患者信息
     *
     * @param employeeId  医生id
     * @param currentPage 当前页码
     * @param pageSize    每页数量
     * @return 患者列表
     */
    List<Register> queryPatientByDocPage(@Param("employeeId") String employeeId
            , @Param("currentPage") int currentPage, @Param("pageSize") int pageSize);

    /**
     * 根据患者信息查询患者列表
     *
     * @param register   患者信息
     * @param employeeId 医生id
     * @return 患者列表
     */
    List<Register> queryPatientByCondition(@Param("register") Register register, @Param("employeeId") int employeeId);

    /**
     * 根据患者病历号更改患者状态为2
     *
     * @param caseNumber 患者病历号
     */
    void updatePatientState(String caseNumber);

    /**
     * 根据患者病历号查询患者信息
     *
     * @param caseNumber 患者病历号
     * @return 患者信息
     */
    Register queryPatientByCaseNum(String caseNumber);

    /**
     * 根据患者看诊状态和医生id查询患者列表
     *
     * @param visitState 患者看诊状态
     * @param employeeId 医生id
     * @return 患者列表
     */
    List<Register> queryRegisterByStateAndDoc(int visitState, int employeeId);

    /**
     * 根据患者姓名或病历号查询患者信息
     *
     * @param register 患者相关信息
     * @return 患者信息
     */
    Register queryPatientByNameOrCaseNum(Register register);

    /**
     * 根据接诊状态和id分页查询查询患者信息列表
     *
     * @param visitState     接诊状态
     * @param registerIdList 患者id列表
     * @param currentPage    当前页数
     * @param pageSize       每页数量
     * @return 患者信息列表
     */
    List<Register> queryPatientByStateAndId(@Param("visitState") int visitState,
                                            @Param("registerIdList") List<Integer> registerIdList,
                                            @Param("currentPage") int currentPage, @Param("pageSize") int pageSize);

    /**
     * 分页查询所有患者信息
     *
     * @param currentPage 当前页码
     * @param pageSize    每页数量
     * @return 患者列表
     */
    List<Register> queryRegisterByPage(int currentPage, int pageSize);

    /**
     * 查询患者总数
     *
     * @return 患者总数
     */
    Integer queryPatientCount();

    /**
     * 根据看诊状态分页查询患者信息
     *
     * @param state       看诊状态
     * @param currentPage 当前页码
     * @param pageSize    每页条数
     * @return 患者信息列表
     */
    List<Register> queryPatientByStateAndPage(int state, int currentPage, int pageSize);

    /**
     * 根据患者姓名、病历号和看诊状态查询患者信息
     *
     * @param register 患者查询条件
     * @return 结果列表
     */
    List<Register> queryPatientByNameOrCaseNumAndState(Register register);

    /**
     * 根据患者病历号修改看诊状态
     *
     * @param caseNumber 病历号
     * @param visitState 看诊状态
     */
    void updateStateById(String caseNumber, int visitState);

    /**
     * 根据条件查询患者数量
     * @param register 查询条件
     * @return 患者数量
     */
    Integer queryCountByCondition(Register register);

    /**
     * 根据患者检查申请的状态查询患者数量
     * @param checkState 检查申请状态
     * @return 患者数量
     */
    Integer queryCountHaveCheck(String checkState);
}
